home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / modula2 / 144 < prev    next >
Encoding:
Text File  |  1996-08-06  |  3.0 KB  |  85 lines

  1. Path: infinitehell.cnmat.berkeley.edu!user
  2. From: erico@cnmat.berkeley.edu (Eric Obermuhlner)
  3. Newsgroups: comp.lang.modula2
  4. Subject: Re: Modula2 for C programmers?
  5. Date: Tue, 23 Jan 1996 16:38:15 -0900
  6. Organization: G-Wiz
  7. Message-ID: <erico-2301961638150001@infinitehell.cnmat.berkeley.edu>
  8. References: <erico-1801961940460001@infinitehell.cnmat.berkeley.edu> <4e1o5v$6i8@seagoon.newcastle.edu.au>
  9. NNTP-Posting-Host: infinitehell.cnmat.berkeley.edu
  10. X-Newsreader: Value-Added NewsWatcher 2.0b27.1+
  11.  
  12. In article <4e1o5v$6i8@seagoon.newcastle.edu.au>, peter@tesla.newcastle.edu.au wrote:
  13.  
  14. > The obvious question, though, is why you would want to do this.
  15. > Such operations are common in C programming because C lacks
  16. > more elegant ways to get the job done.  In Modula-2, there are
  17. > certainly situations where you want to do weird hardware-dependent
  18. > things and break the type system, but those situations should
  19. > arise only when writing very low-level modules.  In most other
  20. > cases, there's almost always a better way to do the job.
  21.  
  22. I don't *want* to do this, I didn't find any other way in my case.
  23.  
  24. <BEGIN WEIRD DESCRIPTION OF MY PROBLEM>
  25. I'm adding Modula code to a project that was 100 percent done in assembler.
  26. I have some global variables that need to be transmitted thru MIDI SYSEX.
  27. I've defined a SYSEX protocoll that allows me to read/write those vars.
  28.  
  29. SYSEX PARAM_DATA from length val_1 .. val_n SYSEXEND (* sets params to values *)
  30. SYSEX PARAM_REQ from length SYSEXEND (* answered by PARAM_DATA *)
  31.  
  32. (* Lets assume the vars are: *)
  33. VAR
  34.   alpha : CARDINAL;  (* idx: 0 *)
  35.   beta : CARDINAL;   (* idx: 1 *)
  36.   gamma : CARDINAL;  (* idx: 2 *)
  37.  
  38. (* My procedure could now look like this *)
  39.  
  40. PROCEDURE ReadParam( from : CARDINAL, to :CARDINAL);
  41. VAR
  42.   i : CARDINAL;
  43. BEGIN
  44.   FOR i:= from TO to DO
  45.     CASE i OF
  46.     | 0 : alpha := ReadMIDICardinal();
  47.     | 1 : beta := ReadMIDICardinal();
  48.     | 2 : gamma := ReadMIDICardinal();
  49.     (* ... *)
  50.     ELSE
  51.       (* ignore *)
  52.     END; (* CASE i *)
  53.   END; (* FOR i *)
  54. END ReadParam;
  55.  
  56. (* ... similar for PROCEDURE WriteParam *)
  57.  
  58. (* or I could use pointer arithmetic to change those values directly. *)
  59.  
  60. <END WEIRD DESCRIPTION OF MY PROBLEM>
  61.  
  62. I admit that I don't like the clean Modula solution, because the code will get huge, even if it looks neat. (The variables to change might one day be in the hundreds)
  63.  
  64. Is there a better way to do this? Maybe like having an array at the same place. (I know, that's C too)
  65.  
  66. <BEGIN OTHER PROBLEMS>
  67. Are there CONST arrays for ROM tables?
  68. How do I initialize a table with values? (in RAM)
  69. <END OTHER PROBLEMS>
  70.  
  71. +-------------------------------------------------------------+
  72. |Eric Obermuhlner  
  73. |erico@g-wiz.com
  74. |if (err == err_bounced) send("erico@cnmat.berkeley.edu"); 
  75. +-------------------------------------------------------------+
  76. #include "stddisclaimer"
  77. #include "funnyquotations"
  78. ERROR 10045: FILE "funnyquotations" EXHAUSTED.
  79. OPENING FILE "notsofunnyquotations" INSTEAD.
  80. ERROR -46: FILE "notsofunnyquotations" HAS A BAD BLOCK.
  81. READING "j{Hr4#^_t~~~
  82. ARGH I'M DYING.
  83. dumping core......
  84. (Just kidding)
  85.